import Banner from "../../Banner";
import { Constant } from "../Const/Constant";
import PrefsManager from "../Managers/PrefsManager";
import { UIManager } from "../Managers/UIManager";
import { ResourceUtil } from "../Utils/ResourceUtil";

const { ccclass, property } = cc._decorator;

@ccclass
export default class PrivacyPanel extends cc.Component {
    panel: cc.Node = null;
    content: cc.Node = null;
    disagreeButton: cc.Node = null;
    privacyLabel: cc.RichText = null;
    cb: Function = null;

    protected onLoad(): void {
        this.panel = cc.find("ScrollView", this.node);
        this.content = cc.find("ScrollView/view/content", this.node);
        this.disagreeButton = cc.find("ScrollView/Buttons/DisagreeButton", this.node);
        this.privacyLabel = cc.find("ScrollView/view/content/PrivacyLabel", this.node).getComponent(cc.RichText);
    }

    protected onDisable(): void {
        cc.Tween.stopAllByTarget(this.panel);
        this.panel.setScale(0);
    }

    Show(hasDisagree: boolean = true, cb: Function = null) {
        this.cb = cb;

        ResourceUtil.LoadJson("Company").then((jsonAsset: cc.JsonAsset) => {
            this.privacyLabel.string = `<color=#000000>1.为了向您提供和持续优化定制化的服务，<b>${Banner.Instance.Company}</b>（以下简称“我们”）将收集和处理以下的信息：\n设备信息，包括设备标识符，Mac，机型，品牌，App包名，App版本号，设备分辨率及像素密度；网格信息，包括网格链接状态，接入网格的方式和类型，IP地址；\n使用信息，包括广告内容的展现，点击，下载；除上述信息外，我们还会收集您在本游戏的账号ID，以用来为您提供更加个性化的服务或广告。\n2，上述数据将会传输并保存至服务器，保存期限为60天，超出这一保留时间后将删除，但法律法规另有要求除外，我们保证不对外公开或向任何第三方提供您的个人信息，但是存在下列情形之一的除外：\n\t（1）公开或提供相关信息之前获得您的许可的；\n\t（2）根据法律或政策的规定而公开或提供的；\n\t（3）根据国家权力机关要求公开或提供的，\n如果你不同意我们采集上述信息，或不同意调用相关手机权限或功能，本软件将无法正常运行，您可通过卸载或退出本软件来终止数据收集及上传。\n3.如果您是未成年人，请在您的监护人仔细阅读本隐私政策。并在征得您的监护人同意的前提下使用我们的服务。\n4.如果您对本隐私政策和我们游戏有任何疑问和建议，请通过客服${jsonAsset.json[Banner.Instance.Company]}联系我们，我们将尽快答复您。</color>`;
            this.scheduleOnce(() => { this.content.setContentSize(this.content.getContentSize().width, this.privacyLabel.node.getContentSize().height + 500) });
        });

        this.disagreeButton.active = hasDisagree;
        this.onDisable();
        cc.tween(this.panel).to(0.3, { scale: 1 }, { easing: 'backOut' }).start();
    }

    OnButtonClick(event: cc.Event) {
        switch (event.target.name) {
            case "AgreeButton":
                PrefsManager.SetBool(Constant.Key.AgreePolicy, true);
                this.cb && this.cb();
                UIManager.Instance.HidePanel(Constant.Panel.PrivacyPanel);
                break;
            case "DisagreeButton":
                Banner.Instance.Quit();
                break;
        }
    }
}
